package br.com.android.pubclub.dados;

import java.util.ArrayList;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import br.com.android.pubclub.basicas.Amizade;
import br.com.android.pubclub.basicas.Cliente;
import br.com.android.pubclub.web.Amigos;
import br.com.android.pubclub.web.Login;

public class ThreadAmizadesAcoes extends Thread {

	int action;
	Bundle parametros;
	Handler hand;
	public static final int EXECUTANDO = 0;
	public static final int EXIBINDO = 1;
	public static final int CONCLUIDO = 2;

	public ThreadAmizadesAcoes(Handler hand, int action, Bundle parametros) {

		this.action = action;
		this.parametros = parametros;
		this.hand = hand;

	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		Message mensagem = new Message();

		Bundle bundle = new Bundle();

		mensagem.what = EXECUTANDO;

		hand.sendMessage(mensagem);

		Message msg = new Message();

		switch (action) {

		case Amigos.RESPONDER_SOLICITACAO:

			Cliente solicitante = (Cliente) parametros
					.getSerializable("solicitante");
			Cliente solicitado = (Cliente) parametros
					.getSerializable("solicitado");
			boolean resposta = parametros.getBoolean("resposta");

			bundle = responderSolicitacaoDeAmizade(
					Integer.valueOf(solicitante.getId_cliente()),
					Integer.valueOf(solicitado.getId_cliente()), resposta);

			msg.setData(bundle);
			break;

		case Amigos.ENVIAR_SOLICITACAO:

			Cliente clienteAlvo = (Cliente) parametros
					.getSerializable("clienteAlvo");
			msg.setData(solicitarAmizade(clienteAlvo));
			break;

		case Amigos.DESFAZER_AMIZADE:

			Cliente cliente1 = (Cliente) parametros
					.getSerializable("solicitante");
			Cliente cliente2 = (Cliente) parametros
					.getSerializable("solicitado");

			bundle = responderSolicitacaoDeAmizade(
					Integer.valueOf(cliente1.getId_cliente()),
					Integer.valueOf(cliente2.getId_cliente()), false);

			msg.setData(bundle);

			break;

		case Amigos.AMIGOS:

			ArrayList<Amizade> listaDeAmizades = WsServicos
					.getAmizades(Amigos.AMIGOS);
			bundle.putSerializable("listaDeAmizades", listaDeAmizades);
			msg.setData(bundle);
			break;

		case Amigos.SOLICITACOES_PENDENTES_ENVIADAS:

			ArrayList<Amizade> listaDeAmizadesPendentesEnviadas = WsServicos
					.getAmizades(Amigos.SOLICITACOES_PENDENTES_ENVIADAS);
			bundle.putSerializable("listaDeAmizades", listaDeAmizadesPendentesEnviadas);
			msg.setData(bundle);
			break;

		case Amigos.SOLICITACOES_PENDENTES_RECEBIDAS:

			ArrayList<Amizade> listaDeAmizadesPendentesRecebidas = WsServicos
					.getAmizades(Amigos.SOLICITACOES_PENDENTES_RECEBIDAS);
			bundle.putSerializable("listaDeAmizades", listaDeAmizadesPendentesRecebidas);
			msg.setData(bundle);
			break;
		}

		msg.what = EXIBINDO;

		hand.sendMessage(msg);
		
		Message ms = new Message();
		
		
		ms.what = CONCLUIDO;
		
		try {
			sleep(2000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		hand.sendMessage(ms);

	}

	public Bundle responderSolicitacaoDeAmizade(int idSolicitante,
			int idSolicitado, boolean resposta) {

		Bundle bundle = new Bundle();

		String mensagem = null;

		boolean sucesso = false;

		SoapObject response = null;

		// Objeto composto pelo NameSpace e pelo mйtodo que queremos chamar
		SoapObject soap = new SoapObject("http://www.outsystems.com",
				"ResponderSolicitacaoAmizade");

		soap.addProperty("SolicitanteId", idSolicitante);
		soap.addProperty("ConvidadeId", idSolicitado);
		soap.addProperty("Resposta", resposta);

		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
				SoapEnvelope.VER11);

		envelope.dotNet = true;
		envelope.implicitTypes = true;
		envelope.setOutputSoapObject(soap);

		String url = "http://flplucio.outsystemscloud.com/PubClubCore/PubClub_Social_WS.asmx";

		HttpTransportSE httpTransport = new HttpTransportSE(url);

		try {

			httpTransport
					.call("http://PubClubCore/PubClub_Social_WS/ResponderSolicitacaoAmizade",
							envelope);

			response = (SoapObject) envelope.getResponse();

			sucesso = Boolean.valueOf(response.getProperty("Sucesso")
					.toString());

			mensagem = response.getProperty("Menssagem").toString();

			bundle.putBoolean("sucesso", sucesso);
			bundle.putString("mensagem", mensagem);

		} catch (Exception e) {

			e.printStackTrace();
		}

		return bundle;

	}

	public Bundle solicitarAmizade(Cliente clienteAlvo) {
		// TODO Auto-generated method stub

		boolean sucesso = false;

		Bundle bundle = new Bundle();

		String mensagem = null;

		SoapObject resposta = null;

		// Objeto composto pelo NameSpace e pelo método que queremos chamar
		SoapObject soap = new SoapObject("http://www.outsystems.com",
				"SolicitarAmizade");

		soap.addProperty("SessionClienteId",
				Integer.valueOf(Login.clienteLogado.getId_cliente()));
		soap.addProperty("AmigoId",
				Integer.valueOf(clienteAlvo.getId_cliente()));

		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
				SoapEnvelope.VER11);

		envelope.dotNet = true;
		envelope.implicitTypes = true;
		envelope.setOutputSoapObject(soap);

		String url = "http://flplucio.outsystemscloud.com/PubClubCore/PubClub_Social_WS.asmx";

		HttpTransportSE httpTransport = new HttpTransportSE(url);

		try {

			httpTransport.call(
					"http://PubClubCore/PubClub_Social_WS/SolicitarAmizade",
					envelope);

			resposta = (SoapObject) envelope.getResponse();
			sucesso = Boolean.valueOf(resposta.getProperty("Sucesso")
					.toString());

			mensagem = resposta.getProperty("Menssagem").toString();

			bundle.putBoolean("sucesso", sucesso);
			bundle.putString("mensagem", mensagem);

		} catch (Exception e) {

			e.printStackTrace();
		}

		return bundle;
	}

}
